package hotel.mensagens;

import hotel.tipos.TipoApartamento;

import java.util.Vector;

import o2b.*;

public class ManterTipoApartamento extends Mensagem{
	/**
	 * Indica o subtipo da mensagem
	 * 1 - Mensagem criar tipo
	 *  11 - Resposta OK
	 *  12 - Resposta NOK
	 * 2 - Mensagem lista tipos
	 *  21 - Resposta lista tipos
	 *  
	 */
	protected int tipoManterTipoApartamento;
	protected TipoApartamento tipoAp;
	protected Vector<TipoApartamento> v;
	
	public ManterTipoApartamento() {
		tipo = TipoMensagem.MANTERTIPOAPARTAMENTO;
		 setV(new Vector<TipoApartamento>());
	}
	
	/**
	 * @param tipoManterServico
	 * Indica o subtipo da mensagem
	 * 1 - Mensagem criar tipo
	 *  11 - Resposta OK
	 *  12 - Resposta NOK
	 * 2 - Mensagem lista tipos
	 *  21 - Resposta lista tipos
	 *  
	 */
	public ManterTipoApartamento(int tipoManterTipoApartamento){
		tipo = TipoMensagem.MANTERTIPOAPARTAMENTO;
		this.tipoManterTipoApartamento = tipoManterTipoApartamento;
		setV(new Vector<TipoApartamento>());
	}
	
	/**
	 * Envia nome do servico a buscar
	 */
	@Override
	public void marshal(IStream stream) throws MarshallableException {
		super.marshal(stream);
		stream.write(tipoManterTipoApartamento);
		switch(tipoManterTipoApartamento){
			case 1:
				stream.write(tipoAp.getDescricao());
				stream.write(tipoAp.getValorDiaria());
				break;
				
			case 11:
				break;
				
			case 12:
				break;
			
			case 2:
				break;
				
			case 21:
				int size = v.size();
				stream.write(size);
				for(int i=0; i < size; i++){
					stream.write(v.get(i).getId());
					stream.write(v.get(i).getDescricao());
					stream.write(v.get(i).getValorDiaria());
				}
				break;
				
			case 22:
				break;
				
			default:
				break;
		}
	}

	/**
	 * Recebe o Serviço
	 */
	@Override
	public void unmarshal(IStream stream) throws MarshallableException {
		this.tipoManterTipoApartamento = stream.readInt();
		switch(tipoManterTipoApartamento){
			case 1:
				getTipoAp().setDescricao((String) stream.readObject());
				getTipoAp().setValorDiaria(stream.readInt());
				break;
				
			case 11:
				break;
				
			case 2:
				break;
				
			case 21:
				int size = stream.readInt();
				setV(new Vector<TipoApartamento>(size));
				for(int i=0; i < size; i++){
					TipoApartamento t = new TipoApartamento();
					t.setId(stream.readInt());
					t.setDescricao((String)stream.readObject());
					t.setValorDiaria(stream.readInt());
					v.add(t);
				}
				break;
				
			default:
				break;
		}
	}

	public int getTipoManterTipoApartamento() {
		return tipoManterTipoApartamento;
	}

	public void setTipoManterTipoApartamento(int tipoManterTipoApartamento) {
		this.tipoManterTipoApartamento = tipoManterTipoApartamento;
	}

	public TipoApartamento getTipoAp() {
		return tipoAp;
	}

	public void setTipoAp(TipoApartamento tipoAp) {
		this.tipoAp = tipoAp;
	}

	public Vector<TipoApartamento> getV() {
		return v;
	}

	public void setV(Vector<TipoApartamento> v) {
		this.v = v;
	}	
}
